package net.zjitc.ui;



import net.zjitc.dao.StudentDao;
import net.zjitc.dao.StudentDaoDB;
import net.zjitc.domain.Student;

import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

/**
 * @Author: Administrator
 * @Date: 2020-04-26 11:25:26
 * 测试界面（控制台）
 * 界面信息展示，接受用户输入，数据封装，调用dao层相应方法完成功能
 */
public class StudentTest {
    /* 定义在类的内部，方法的外面，这样该类中所有方法都可以使用了*/
    /* 定义接收用户键盘输入的scanner对象*/
    private static Scanner scanner = new Scanner(System.in);
    /* 利用多态创建dao对象*/
    private static StudentDao dao = new StudentDaoDB();

    /**
     * main方法是程序的入口
     *
     * @param args
     */
    public static void main(String[] args) {
        /* 5个功能的界面 循环选择*/
        while (true) {
            System.out.println("--------欢迎光临---------");
            System.out.println("1、添加学生信息");
            System.out.println("2、查询学生信息");
            System.out.println("3、修改学生信息");
            System.out.println("4、删除学生信息");
            System.out.println("5、退出系统");
            System.out.println("请输入你的选择：");
            /* 接收用户键盘输入，保存在变量i*/
            int i = scanner.nextInt();
            /* 根据用户的输入，进入不同的功能界面*/
            switch (i) {
                case 1:
                    /* 保存界面*/
                    insertUI();
                    break;
                case 2:
                    /* 查询界面*/
                    selectUI();
                    break;
                case 3:
                    /* 更新界面*/
                    updateUI();
                    break;
                case 4:
                    /* 删除界面*/
                    deleteUI();
                    break;
                case 5:
                    /* 结束程序*/
                    System.exit(0);
                    break;
                default:
                    System.out.println("输入有误！请重新输入");
            }
        }
    }

    private static void insertUI() {
        System.out.println("----保存界面-----");
        /* 收集用户输入，（数据可能还需要封装成对象），调用dao层的相应方法完成功能*/

        System.out.println("请输入学生姓名：");
        /* 1、输入字符串，可以用next()或者nextLine()
         *  next()：输入空格、回车 表示输入结束
         *  nextLine()：输入回车表示输入结束 */
        /* 2、使用的是同一个Scanner对象输入，
         *   前面输入过Int/double类型，紧接着输入String类型，会有问题
         *   增加一行代码(scanner.nextLine() )来吸收回车*/
        scanner.nextLine();
        String name = scanner.nextLine();
        System.out.println("请输入学生性别：");
        String sex = scanner.nextLine();
        System.out.println("请输入学生年龄：");
        int age = scanner.nextInt();
        /* 输入数据是否符合要求，在界面上做判断
           若用户输入不符合要求，给出错误提示信息*/
        if(name.equals("")){
            System.out.println("输入有误：学生姓名不能为空");
        }
        if(sex.equals("")){
            System.out.println("输入有误：学生性别不能为空");
        }
        if(age<=0){
            System.out.println("输入有误：学生年龄不能为负数或等于0");
        }
        /* 若输入符合要求，再将结果封装成对象，调用dao层方法去完成保存功能
        *  判断姓名是否重复，在Dao层做判断*/
        if(!name.equals("") && !sex.equals("") && age>0){
            /* 将用户输入的信息封装成student对象*/
            Student student=new Student(name,sex,age);
            /*调用dao层的方法完成添加/保存功能*/
            dao.insert(student);
        }

    }

    private static void selectUI() {
        System.out.println("----查询界面----");
        System.out.println("所有学生信息如下：");
        /* 不需要用户输入，直接调用dao层方法完成功能，
        *  将返回的数据，进行展示*/
        List<Student> list = dao.selectAll();
        Iterator<Student> iterator = list.iterator();
        while (iterator.hasNext()){
            Student student = iterator.next();
            System.out.println(student);
        }
    }

    private static void updateUI() {
        System.out.println("----更新界面----");
        System.out.println("请输入要更新的学生姓名：");
        scanner.nextLine();
        String name = scanner.nextLine();
        /* 由于更新功能还需要用户输入更新后的数据，
           所以需要判断是否存在要更新的学生，
           这部分操作可以在界面层完成，也可以在dao层完成，JavaWeb中会放到业务层service去完成*/
        Student student = dao.selectByName(name);
        if(student==null){
            System.out.println("要更新的学生不存在！");
        }else{
            /* 展示要更新的学生信息，再让用户输入更新后的信息，最后调用dao方法完成更新功能*/
            System.out.println("要更新的学生信息如下：");
            System.out.println(student);
            System.out.println("请输入更新后的学生姓名：");
            String name1 = scanner.nextLine();
            System.out.println("请输入学生性别：");
            String sex = scanner.nextLine();
            System.out.println("请输入学生年龄：");
            int age = scanner.nextInt();
            /* 将用户输入的信息封装成Student对象*/
            Student s=new Student(student.getId(),name1,sex,age);
            dao.update(student.getId(),s);
        }
    }

    private static void deleteUI() {
        System.out.println("----删除界面----");
        System.out.println("请输入要删除的学生姓名：");
        scanner.nextLine();
        String name = scanner.nextLine();
        /* 调用dao层方法，判断是否存在要删除的学生
        *  若存在，调用dao层方法完成删除功能，
        * 若不存在，提示*/
        Student student = dao.selectByName(name);
        if(student==null){
            System.out.println("您要删除的学生不存在");
        }else{
            dao.delete(student.getId());
        }
    }

}
